--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_docs_manager.py e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 18.30 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787os
Tff7b72import T7ee787shutil
Tff7b72import T7ee787zipfile
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Tff7b72import T7ee787pytest
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3HealthCheckTb4b4b4, Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787docs_manager Tff7b72import Te6edf3DocsManager
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8fftemp_dirsTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3docs_dir Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulum-docsTa5d6ff"
Te6edf3docs_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tff7b72return Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3docs_dirTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffdocs_managerTb4b4b4(Te6edf3temp_dirsTb4b4b4)Tb4b4b4:
Te6edf3public_dirTb4b4b4, Te6edf3_ Tff7b72= Te6edf3temp_dirs
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Te6edf3public_dirTb4b4b4)
Tff7b72def Td2a8fftest_docs_manager_initializationTb4b4b4(Te6edf3docs_managerTb4b4b4, Te6edf3temp_dirsTb4b4b4)Tb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3docs_dir Tff7b72= Te6edf3temp_dirs
Tff7b72assert Te6edf3docs_managerTff7b72.Td2a8ffdocs_dir Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3docs_dirTb4b4b4, Ta5d6ff"Ta5d6ffcurrentTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3docs_dirTb4b4b4)
Tff7b72assert Te6edf3docs_managerTff7b72.Td2a8ffupload_status Tff7b72== Ta5d6ff"Ta5d6ffidleTa5d6ff"
Tff7b72def Td2a8fftest_docs_manager_storage_dir_fallbackTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3storage_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"
Te6edf3storage_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3storage_dirTb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffdocs_dir Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tffa657strTb4b4b4(Te6edf3storage_dirTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffreticulum-docsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcurrentTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dir Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tffa657strTb4b4b4(Te6edf3storage_dirTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffbundled_docs_dir Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffreticulum-docs-bundledTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcurrentTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3dmTff7b72.Td2a8ffdocs_base_dirTb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dirTb4b4b4)
Tff7b72def Td2a8fftest_has_bundled_docs_falls_back_to_publicTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3storage_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"
Te6edf3storage_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3bundled Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulum-docs-bundledTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffcurrentTa5d6ff"
Te6edf3bundledTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff<html></html>Ta5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3storage_dirTb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffhas_bundled_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffhas_user_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffhas_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Te6edf3resolved Tff7b72= Te6edf3dmTff7b72.Td2a8fffind_docs_fileTb4b4b4(Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3resolved Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Tffa657strTb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_user_docs_take_precedence_over_bundledTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3storage_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"
Te6edf3storage_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3bundled Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulum-docs-bundledTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffcurrentTa5d6ff"
Te6edf3bundledTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff<html>bundled</html>Ta5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3storage_dirTb4b4b4)Tb4b4b4)
Te6edf3user_index Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3dmTff7b72.Td2a8ffdocs_dirTb4b4b4, Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3dmTff7b72.Td2a8ffdocs_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3user_indexTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ff<html>user</html>Ta5d6ff"Tb4b4b4)
Te6edf3resolved Tff7b72= Te6edf3dmTff7b72.Td2a8fffind_docs_fileTb4b4b4(Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3resolved Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3user_indexTb4b4b4)
Tff7b72def Td2a8fftest_find_docs_file_rejects_traversalTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3bundled Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulum-docs-bundledTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffcurrentTa5d6ff"
Te6edf3bundledTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff<html></html>Ta5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsecret.txtTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8fffind_docs_fileTb4b4b4(Ta5d6ff"Ta5d6ff../../secret.txtTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3dmTff7b72.Td2a8fffind_docs_fileTb4b4b4(Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3dmTff7b72.Td2a8fffind_docs_fileTb4b4b4(Ta5d6ff"Ta5d6ffmissing.htmlTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_docs_manager_readonly_public_dir_handlingTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffreadonly_publicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffchmodTb4b4b4(Te6edf3public_dirTb4b4b4, T79c0ff0o555Tb4b4b4) T8b949e# noqa: S103
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3patch
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffos.makedirsTa5d6ff"Tb4b4b4, Te6edf3side_effectTff7b72=Tf85149OSErrorTb4b4b4(Ta5d6ff"Ta5d6ffRead-only file systemTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8fflast_error Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Tb4b4b4(
Ta5d6ff"Ta5d6ffRead-only file systemTa5d6ff" Tff7b72in Te6edf3dmTff7b72.Td2a8fflast_error
Tff7b72or Ta5d6ff"Ta5d6ffPermission deniedTa5d6ff" Tff7b72in Te6edf3dmTff7b72.Td2a8fflast_error
Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffchmodTb4b4b4(Te6edf3public_dirTb4b4b4, T79c0ff0o755Tb4b4b4) T8b949e# noqa: S103
Tff7b72def Td2a8fftest_has_docsTb4b4b4(Te6edf3docs_managerTb4b4b4, Te6edf3temp_dirsTb4b4b4)Tb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3docs_dir Tff7b72= Te6edf3temp_dirs
Tff7b72assert Te6edf3docs_managerTff7b72.Td2a8ffhas_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Te6edf3current_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3docs_dirTb4b4b4, Ta5d6ff"Ta5d6ffcurrentTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3current_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3index_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3current_dirTb4b4b4, Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3index_pathTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ff<html></html>Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3docs_managerTff7b72.Td2a8ffhas_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_get_status_reports_bundled_and_user_flagsTb4b4b4(Te6edf3docs_managerTb4b4b4)Tb4b4b4:
Te6edf3status Tff7b72= Te6edf3docs_managerTff7b72.Td2a8ffget_statusTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffidleTa5d6ff"
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff0
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffhas_docsTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72False
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffhas_bundled_docsTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72False
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffhas_user_docsTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_upload_zip_extracts_and_switches_versionTb4b4b4(Te6edf3docs_managerTb4b4b4)Tb4b4b4:
Te6edf3payload Tff7b72= Te6edf3_make_docs_zipTb4b4b4(
Te6edf3filesTff7b72=Tb4b4b4{
Ta5d6ff"Ta5d6ffreticulum_website-main/docs/index.htmlTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff<html>uploaded</html>Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffreticulum_website-main/docs/manual.htmlTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff<html>manual</html>Ta5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3docs_managerTff7b72.Td2a8ffupload_zipTb4b4b4(Te6edf3payloadTb4b4b4, Ta5d6ff"Ta5d6ffv-testTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3docs_managerTff7b72.Td2a8ffupload_status Tff7b72== Ta5d6ff"Ta5d6ffcompletedTa5d6ff"
Tff7b72assert Ta5d6ff"Ta5d6ffv-testTa5d6ff" Tff7b72in Te6edf3docs_managerTff7b72.Td2a8ffget_available_versionsTb4b4b4(Tb4b4b4)
Te6edf3resolved Tff7b72= Te6edf3docs_managerTff7b72.Td2a8fffind_docs_fileTb4b4b4(Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3resolved Tff7b72is Tff7b72not Tff7b72None
Tff7b72with Tffa657openTb4b4b4(Te6edf3resolvedTb4b4b4) Tff7b72as Te6edf3fhTb4b4b4:
Tff7b72assert Ta5d6ff"Ta5d6ffuploadedTa5d6ff" Tff7b72in Te6edf3fhTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_clear_reticulum_docs_does_not_touch_bundledTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3storage_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"
Te6edf3storage_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3bundled Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulum-docs-bundledTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffcurrentTa5d6ff"
Te6edf3bundledTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff<html>bundled</html>Ta5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3storage_dirTb4b4b4)Tb4b4b4)
Te6edf3payload Tff7b72= Te6edf3_make_docs_zipTb4b4b4(
Te6edf3filesTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffreticulum_website-main/docs/index.htmlTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff<html>uploaded</html>Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3dmTff7b72.Td2a8ffupload_zipTb4b4b4(Te6edf3payloadTb4b4b4, Ta5d6ff"Ta5d6ffv1Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffhas_user_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffclear_reticulum_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffhas_bundled_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_export_reticulum_docs_returns_none_when_emptyTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffexport_reticulum_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_export_reticulum_docs_uses_upload_compatible_layoutTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3bundled Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulum-docs-bundledTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffcurrentTa5d6ff"
Te6edf3bundledTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff<html>bundled</html>Ta5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffmanualTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffmanualTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff<html>chapter</html>Ta5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3payload Tff7b72= Te6edf3dmTff7b72.Td2a8ffexport_reticulum_docsTb4b4b4(Te6edf3root_folderTff7b72=Ta5d6ff"Ta5d6ffreticulum_manualTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3payload Tff7b72is Tff7b72not Tff7b72None
Tff7b72import T7ee787io Tff7b72as T7ee787_io
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3_ioTff7b72.Td2a8ffBytesIOTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4) Tff7b72as Te6edf3zfTb4b4b4:
Te6edf3names Tff7b72= Tffa657sortedTb4b4b4(Te6edf3zfTff7b72.Td2a8ffnamelistTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffreticulum_manual/docs/index.htmlTa5d6ff" Tff7b72in Te6edf3names
Tff7b72assert Ta5d6ff"Ta5d6ffreticulum_manual/docs/manual/index.htmlTa5d6ff" Tff7b72in Te6edf3names
Tff7b72for Te6edf3n Tff7b72in Te6edf3namesTb4b4b4:
Tff7b72assert Te6edf3nTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffreticulum_manual/docs/Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_export_reticulum_docs_round_trips_through_uploadTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3bundled Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulum-docs-bundledTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffcurrentTa5d6ff"
Te6edf3bundledTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3bundled Tff7b72/ Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff<html>shared</html>Ta5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3src Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3payload Tff7b72= Te6edf3srcTff7b72.Td2a8ffexport_reticulum_docsTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3payload Tff7b72is Tff7b72not Tff7b72None
Te6edf3other_public Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffother_publicTa5d6ff"
Te6edf3other_publicTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3other Tff7b72= Te6edf3DocsManagerTb4b4b4(
Te6edf3configTb4b4b4,
Tffa657strTb4b4b4(Te6edf3other_publicTb4b4b4)Tb4b4b4,
Te6edf3storage_dirTff7b72=Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffother_storageTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3otherTff7b72.Td2a8ffupload_zipTb4b4b4(Te6edf3payloadTb4b4b4, Ta5d6ff"Ta5d6ffshared-from-peerTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Ta5d6ff"Ta5d6ffshared-from-peerTa5d6ff" Tff7b72in Te6edf3otherTff7b72.Td2a8ffget_available_versionsTb4b4b4(Tb4b4b4)
Te6edf3resolved Tff7b72= Te6edf3otherTff7b72.Td2a8fffind_docs_fileTb4b4b4(Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3resolved Tff7b72is Tff7b72not Tff7b72None
Tff7b72with Tffa657openTb4b4b4(Te6edf3resolvedTb4b4b4) Tff7b72as Te6edf3fhTb4b4b4:
Tff7b72assert Ta5d6ff"Ta5d6ffsharedTa5d6ff" Tff7b72in Te6edf3fhTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_make_docs_zipTb4b4b4(Te6edf3filesTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657bytesTb4b4b4:
Tff7b72import T7ee787io
Te6edf3buf Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3bufTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zfTb4b4b4:
Tff7b72for Te6edf3pathTb4b4b4, Te6edf3content Tff7b72in Te6edf3filesTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3zfTff7b72.Td2a8ffwritestrTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3contentTb4b4b4)
Tff7b72return Te6edf3bufTff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcreate_mock_zipTb4b4b4(Te6edf3zip_pathTb4b4b4, Te6edf3file_listTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3zip_pathTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zfTb4b4b4:
Tff7b72for Te6edf3file_path Tff7b72in Te6edf3file_listTb4b4b4:
Te6edf3zfTff7b72.Td2a8ffwritestrTb4b4b4(Te6edf3file_pathTb4b4b4, Ta5d6ff"Ta5d6fftest contentTa5d6ff"Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[
Te6edf3HealthCheckTff7b72.Td2a8fffilter_too_muchTb4b4b4,
Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3root_folder_nameTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3min_sizeTff7b72=T79c0ff1Tb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff50Tb4b4b4)Tff7b72.Td2a8fffilterTb4b4b4(
Tff7b72lambda Te6edf3xTb4b4b4: Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72not Tff7b72in Te6edf3x Tff7b72and Ta5d6ff"Tffea00\x00Ta5d6ff" Tff7b72not Tff7b72in Te6edf3x Tff7b72and Te6edf3x Tff7b72not Tff7b72in Tb4b4b4[Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3docs_fileTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3min_sizeTff7b72=T79c0ff1Tb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff50Tb4b4b4)Tff7b72.Td2a8fffilterTb4b4b4(
Tff7b72lambda Te6edf3xTb4b4b4: Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72not Tff7b72in Te6edf3x Tff7b72and Ta5d6ff"Tffea00\x00Ta5d6ff" Tff7b72not Tff7b72in Te6edf3xTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_extract_docs_fuzzingTb4b4b4(Te6edf3docs_managerTb4b4b4, Te6edf3temp_dirsTb4b4b4, Te6edf3root_folder_nameTb4b4b4, Te6edf3docs_fileTb4b4b4)Tb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3docs_dir Tff7b72= Te6edf3temp_dirs
Te6edf3zip_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3docs_dirTb4b4b4, Ta5d6ff"Ta5d6fftest.zipTa5d6ff"Tb4b4b4)
Te6edf3zip_files Tff7b72= Tb4b4b4[
Ta5d6fffTa5d6ff"Tffd700{Te6edf3root_folder_nameTffd700}Ta5d6ff/Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Tffd700{Te6edf3root_folder_nameTffd700}Ta5d6ff/docs/Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Tffd700{Te6edf3root_folder_nameTffd700}Ta5d6ff/docs/Tffd700{Te6edf3docs_fileTffd700}Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Te6edf3create_mock_zipTb4b4b4(Te6edf3zip_pathTb4b4b4, Te6edf3zip_filesTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3docs_managerTff7b72.Td2a8ff_extract_docsTb4b4b4(Te6edf3zip_pathTb4b4b4, Ta5d6ff"Ta5d6fffuzzTa5d6ff"Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72finallyTb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3zip_pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3zip_pathTb4b4b4)
Tff7b72for Te6edf3item Tff7b72in Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Te6edf3docs_dirTb4b4b4)Tb4b4b4:
Te6edf3item_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3docs_dirTb4b4b4, Te6edf3itemTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3item_pathTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3item_pathTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3item_pathTb4b4b4)
Tff7b72def Td2a8fftest_extract_docs_malformed_zipTb4b4b4(Te6edf3docs_managerTb4b4b4, Te6edf3temp_dirsTb4b4b4)Tb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3docs_dir Tff7b72= Te6edf3temp_dirs
Te6edf3zip_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3docs_dirTb4b4b4, Ta5d6ff"Ta5d6ffmalformed.zipTa5d6ff"Tb4b4b4)
Te6edf3create_mock_zipTb4b4b4(Te6edf3zip_pathTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6fffile_at_root.txtTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3docs_managerTff7b72.Td2a8ff_extract_docsTb4b4b4(Te6edf3zip_pathTb4b4b4, Ta5d6ff"Ta5d6ffmalformed-1Ta5d6ff"Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149IndexErrorTb4b4b4, Tf85149ExceptionTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72finallyTb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3zip_pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3zip_pathTb4b4b4)
Te6edf3create_mock_zipTb4b4b4(Te6edf3zip_pathTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffroot/not_docs/file.txtTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3docs_managerTff7b72.Td2a8ff_extract_docsTb4b4b4(Te6edf3zip_pathTb4b4b4, Ta5d6ff"Ta5d6ffmalformed-2Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72finallyTb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3zip_pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3zip_pathTb4b4b4)
Tff7b72def Td2a8fftest_populate_meshchatx_docs_generates_index_htmlTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3docs_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdocsTa5d6ff"
Te6edf3docs_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3en_dir Tff7b72= Te6edf3docs_dir Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3en_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3en_dir Tff7b72/ Ta5d6ff"Ta5d6ffintro.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# HelloTffea00\nTa5d6ffWorldTa5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3docs_dir Tff7b72/ Ta5d6ff"Ta5d6ffmanifest.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(
Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffversionTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6ffdefault_languageTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflanguagesTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffcodeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffnameTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffEnglishTa5d6ff"Ta5d6ff}],Ta5d6ff'
Ta5d6ff'Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffidTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffmainTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fforderTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffMainTa5d6ff"Ta5d6ff},Ta5d6ff"Ta5d6ffitemsTa5d6ff"Ta5d6ff:Ta5d6ff'
Ta5d6ff'Ta5d6ff[Ta5d6ff{Ta5d6ff"Ta5d6ffpathTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffen/intro.mdTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflangTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffIntroTa5d6ff"Ta5d6ff}}]}]}Ta5d6ff'Tb4b4b4,
Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3project_rootTff7b72=Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4)
Te6edf3dmTff7b72.Td2a8ffpopulate_meshchatx_docsTb4b4b4(Tb4b4b4)
Te6edf3index_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dirTb4b4b4, Ta5d6ff"Ta5d6ffindex.htmlTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3index_pathTb4b4b4)
Te6edf3content Tff7b72= Tffa657openTb4b4b4(Te6edf3index_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffMeshChatX DocumentationTa5d6ff" Tff7b72in Te6edf3content
Tff7b72assert Ta5d6ff"Ta5d6ffen/intro.htmlTa5d6ff" Tff7b72in Te6edf3content
Tff7b72assert Ta5d6ff"Ta5d6ffIntroTa5d6ff" Tff7b72in Te6edf3content
Tff7b72def Td2a8fftest_populate_meshchatx_docs_skips_agents_treeTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3docs_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdocsTa5d6ff"
Te6edf3docs_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3en_dir Tff7b72= Te6edf3docs_dir Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3en_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3en_dir Tff7b72/ Ta5d6ff"Ta5d6ffintro.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# HelloTffea00\nTa5d6ff"Tb4b4b4)
Te6edf3agents_dir Tff7b72= Te6edf3docs_dir Tff7b72/ Ta5d6ff"Ta5d6ffagentsTa5d6ff"
Te6edf3agents_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3agents_dir Tff7b72/ Ta5d6ff"Ta5d6ffoverview.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# Agent onlyTffea00\nTa5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3docs_dir Tff7b72/ Ta5d6ff"Ta5d6ffmanifest.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(
Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffversionTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6ffdefault_languageTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflanguagesTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffcodeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffnameTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffEnglishTa5d6ff"Ta5d6ff}],Ta5d6ff'
Ta5d6ff'Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffidTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffmainTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fforderTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffMainTa5d6ff"Ta5d6ff},Ta5d6ff"Ta5d6ffitemsTa5d6ff"Ta5d6ff:Ta5d6ff'
Ta5d6ff'Ta5d6ff[Ta5d6ff{Ta5d6ff"Ta5d6ffpathTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffen/intro.mdTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflangTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffIntroTa5d6ff"Ta5d6ff}}]}]}Ta5d6ff'Tb4b4b4,
Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4, Te6edf3project_rootTff7b72=Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4)
Te6edf3dmTff7b72.Td2a8ffpopulate_meshchatx_docsTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dirTb4b4b4, Ta5d6ff"Ta5d6ffenTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffintro.mdTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72assert Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dirTb4b4b4, Ta5d6ff"Ta5d6ffagentsTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_get_meshchatx_docs_list_with_manifestTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3mesh_docs Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff"
Te6edf3en_dir Tff7b72= Te6edf3mesh_docs Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3en_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3en_dir Tff7b72/ Ta5d6ff"Ta5d6ffintro.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# IntroTffea00\nTa5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3mesh_docs Tff7b72/ Ta5d6ff"Ta5d6ffmanifest.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(
Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffversionTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6ffdefault_languageTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflanguagesTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffcodeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffnameTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffEnglishTa5d6ff"Ta5d6ff}],Ta5d6ff'
Ta5d6ff'Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffidTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffmainTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fforderTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffOverviewTa5d6ff"Ta5d6ff},Ta5d6ff"Ta5d6ffitemsTa5d6ff"Ta5d6ff:Ta5d6ff'
Ta5d6ff'Ta5d6ff[Ta5d6ff{Ta5d6ff"Ta5d6ffpathTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffen/intro.mdTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflangTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffIntroductionTa5d6ff"Ta5d6ff}}]}]}Ta5d6ff'Tb4b4b4,
Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dir Tff7b72= Tffa657strTb4b4b4(Te6edf3mesh_docsTb4b4b4)
Te6edf3listing Tff7b72= Te6edf3dmTff7b72.Td2a8ffget_meshchatx_docs_listTb4b4b4(Ta5d6ff"Ta5d6ffenTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffdefault_languageTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffenTa5d6ff"
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffdocsTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffitemsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffIntroductionTa5d6ff"
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ffen/intro.mdTa5d6ff"Tb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffmarkdownTa5d6ff"
Tff7b72def Td2a8fftest_get_doc_content_rejects_directory_pathTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
T8b949e# Ensure meshchatx_docs_dir exists as a directory
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
T8b949e# Passing "." should resolve to the directory itself, not a file
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_is_safe_doc_path_rejects_unsafe_valuesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3DocsManagerTff7b72.Td2a8ff_is_safe_doc_pathTb4b4b4(Ta5d6ff"Ta5d6ffen/guide.mdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3DocsManagerTff7b72.Td2a8ff_is_safe_doc_pathTb4b4b4(Ta5d6ff"Ta5d6ff../secret.mdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3DocsManagerTff7b72.Td2a8ff_is_safe_doc_pathTb4b4b4(Ta5d6ff"Ta5d6ff/etc/passwdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3DocsManagerTff7b72.Td2a8ff_is_safe_doc_pathTb4b4b4(Ta5d6ff"Ta5d6ffen/../secret.mdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3DocsManagerTff7b72.Td2a8ff_is_safe_doc_pathTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3DocsManagerTff7b72.Td2a8ff_is_safe_doc_pathTb4b4b4(Ta5d6ff"Ta5d6ffen/guideTffea00\0Ta5d6ff.mdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_has_meshchatx_docs_finds_nested_filesTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3mesh_docs Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3mesh_docsTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3mesh_docs Tff7b72/ Ta5d6ff"Ta5d6ffguide.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# GuideTffea00\nTa5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dir Tff7b72= Tffa657strTb4b4b4(Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffhas_meshchatx_docsTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_get_doc_content_rejects_unsafe_pathsTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3dmTff7b72.Td2a8ffmeshchatx_docs_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ff../outside.mdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ff/etc/passwdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_get_doc_content_nested_pathTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3en_dir Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3en_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3en_dir Tff7b72/ Ta5d6ff"Ta5d6ffguide.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# TitleTffea00\nTa5d6ffBodyTa5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Te6edf3content Tff7b72= Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ffen/guide.mdTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3content Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3contentTb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffmarkdownTa5d6ff"
Tff7b72assert Ta5d6ff"Ta5d6ffTitleTa5d6ff" Tff7b72in Te6edf3contentTb4b4b4[Ta5d6ff"Ta5d6ffhtmlTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8fftest_invalid_manifest_returns_error_and_flat_fallbackTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3mesh_docs Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3mesh_docsTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3mesh_docs Tff7b72/ Ta5d6ff"Ta5d6fforphan.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# OrphanTffea00\nTa5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffmanifest.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff{Ta5d6ff not jsonTa5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Te6edf3listing Tff7b72= Te6edf3dmTff7b72.Td2a8ffget_meshchatx_docs_listTb4b4b4(Ta5d6ff"Ta5d6ffenTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffmanifest_errorTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffInvalid manifest JSONTa5d6ff"
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffdocsTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffallTa5d6ff"
Tff7b72def Td2a8fftest_manifest_skips_missing_filesTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3mesh_docs Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff"
Te6edf3en_dir Tff7b72= Te6edf3mesh_docs Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3en_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3en_dir Tff7b72/ Ta5d6ff"Ta5d6ffpresent.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# PresentTffea00\nTa5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3mesh_docs Tff7b72/ Ta5d6ff"Ta5d6ffmanifest.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(
Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffversionTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6ffdefault_languageTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflanguagesTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffcodeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffnameTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffEnglishTa5d6ff"Ta5d6ff}],Ta5d6ff'
Ta5d6ff'Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Ta5d6ff:[Ta5d6ff{Ta5d6ff"Ta5d6ffidTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffmainTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fforderTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffMainTa5d6ff"Ta5d6ff},Ta5d6ff"Ta5d6ffitemsTa5d6ff"Ta5d6ff:Ta5d6ff'
Ta5d6ff'Ta5d6ff[Ta5d6ff{Ta5d6ff"Ta5d6ffpathTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffen/missing.mdTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflangTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffMissingTa5d6ff"Ta5d6ff}},Ta5d6ff'
Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffpathTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffen/present.mdTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fflangTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff{Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffPresentTa5d6ff"Ta5d6ff}}]}]}Ta5d6ff'Tb4b4b4,
Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Te6edf3listing Tff7b72= Te6edf3dmTff7b72.Td2a8ffget_meshchatx_docs_listTb4b4b4(Ta5d6ff"Ta5d6ffenTa5d6ff"Tb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffitemsTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3listingTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffitemsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffen/present.mdTa5d6ff"
Tff7b72def Td2a8fftest_search_finds_nested_meshchatx_docsTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3en_dir Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3en_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3en_dir Tff7b72/ Ta5d6ff"Ta5d6ffguide.mdTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffunique-nested-token-alphaTffea00\nTa5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Te6edf3results Tff7b72= Te6edf3dmTff7b72.Td2a8ffsearchTb4b4b4(Ta5d6ff"Ta5d6ffunique-nested-token-alphaTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffenTa5d6ff"Tb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffsourceTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffMeshChatXTa5d6ff" Tff7b72for Te6edf3r Tff7b72in Te6edf3resultsTb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Ta5d6ff"Ta5d6ffen/guide.mdTa5d6ff" Tff7b72in Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3resultsTb4b4b4)
Tff7b72def Td2a8fftest_get_doc_content_returns_none_on_read_errorTb4b4b4(Te6edf3tmp_pathTb4b4b4, Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3public_dir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpublicTa5d6ff"
Te6edf3public_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3en_dir Tff7b72= Te6edf3public_dir Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatx-docsTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3en_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3doc_path Tff7b72= Te6edf3en_dir Tff7b72/ Ta5d6ff"Ta5d6ffguide.mdTa5d6ff"
Te6edf3doc_pathTff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# GuideTffea00\nTa5d6ff"Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3dm Tff7b72= Te6edf3DocsManagerTb4b4b4(Te6edf3configTb4b4b4, Tffa657strTb4b4b4(Te6edf3public_dirTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fffail_openTb4b4b4(Tff7b72*Te6edf3_argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3_kwargsTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149OSErrorTb4b4b4(Ta5d6ff"Ta5d6ffPermission deniedTa5d6ff"Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffsetattrTb4b4b4(Ta5d6ff"Ta5d6ffbuiltins.openTa5d6ff"Tb4b4b4, Te6edf3fail_openTb4b4b4)
Tff7b72assert Te6edf3dmTff7b72.Td2a8ffget_doc_contentTb4b4b4(Ta5d6ff"Ta5d6ffen/guide.mdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────